package com.htzos.base.generate.tool;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import com.htzos.admin.system.bean.SystemMenuBase;
import com.htzos.base.generate.bean.TableBean;

@Service
public class DbManager {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	/**
	 * 根据表名获取该表对应的字段信息
	 * @param tableName
	 * @return
	 * @throws SQLException
	 */
	public Map<String, TableBean> getTableInfo(String tableName)
			throws SQLException {

		Connection conn = jdbcTemplate.getDataSource().getConnection();
		Map<String, TableBean> map = new LinkedHashMap<String, TableBean>();
		TableBean table=null;
		DatabaseMetaData mdm = conn.getMetaData();
		ResultSet rs = mdm.getColumns(null, "%", tableName, "%");
		while (rs.next()) {
			table=new TableBean();
			String columnName=rs.getString("COLUMN_NAME");
			
			table.setColumnName(columnName);
			table.setColumnType(rs.getString("TYPE_NAME"));
			table.setDatasize(rs.getInt("COLUMN_SIZE"));
			table.setDigits(rs.getInt("DECIMAL_DIGITS"));
			table.setNullable(rs.getInt("NULLABLE"));
			table.setRemarks(rs.getString("REMARKS"));

			System.out.print(columnName+":");
			System.out.println(table.getColumnType());
			map.put(columnName, table);
		}

		// processJavaFile("cn.twd.bean","guider_member_base",map);
		
		conn.close();

		return map;
	}

	public String getPkName(String tableName) throws SQLException {
		Connection conn = jdbcTemplate.getDataSource().getConnection();
		DatabaseMetaData mdm = conn.getMetaData();
		ResultSet rs = mdm.getPrimaryKeys(null, "%", tableName);
		String pkName=null;
		while (rs.next()) {
//			TABLE_CAT String => 表类别（可为 null）
//			TABLE_SCHEM String => 表模式（可为 null）
//			TABLE_NAME String => 表名称
//			COLUMN_NAME String => 列名称
//			KEY_SEQ short => 主键中的序列号（值 1 表示主键中的第一列，值 2 表示主键中的第二列）。
//			PK_NAME String => 主键的名称（可为 null）
			pkName=rs.getString("COLUMN_NAME");
		}
		conn.close();
		return pkName;
	}

	/**
	 * 插入菜单（生成源码的时候）
	 * @param menu
	 * @return
	 * @throws Exception
	 */
	public int insertMenu(SystemMenuBase menu) throws Exception{
		String sql="insert into system_menu_base (AddUrl,DeleteUrl,IconImage,MenuName, MenuUrl, OrderBy,ParentId, SelectUrl,UpdateUrl)"
				+"values ('"+menu.getAddUrl()+"','"+menu.getDeleteUrl()+"','"
				+menu.getIconImage()+"','"+menu.getMenuName()+"','"+menu.getMenuUrl()+"',"
				+menu.getOrderBy()+","+menu.getParentId()+",'"+menu.getSelectUrl()+"','"
				+menu.getUpdateUrl()+"')";
		return jdbcTemplate.update(sql);
	}
}